//
//  AFHTTPClient.h
//  xiaoTest
//
//  Created by Xiaoshiheng_pro on 2016/12/13.
//  Copyright © 2016年 xiao_shoubao. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "AFHTTPCache.h"


/** 请求成功的Block */
typedef void(^HttpRequestSuccess)(id responseObject);

/** 请求失败的Block */
typedef void(^HttpRequestFailed)(NSError *error);

/** 缓存的Block */
typedef void(^HttpRequestCache)(id responseCache);

/** 上传或者下载的进度, Progress.completedUnitCount:当前大小 - Progress.totalUnitCount:总大小*/
typedef void (^HttpProgress)(NSProgress *progress);


@interface AFHTTPClient : NSObject

#pragma mark ----------------加密 拼接参数------------------------


+( NSDictionary *)JMWithStringUrl:(NSString *)URL   parameters:(NSDictionary *)parameters;

#pragma mark ----------------基本请求------------------------


+ (AFHTTPSessionManager*)httpSessionManagerWithBaseUrl:(NSString*)baseUrl Headers:(NSDictionary *)headers;

/**
 功能描述:POST请求,自动缓存

 @param serverPath 服务器地址
 @param headers 请求头
 @param relativePath 请求相对路径地址
 @param parameters 请求参数
 @param responseCache 缓存数据的回调
 @param success       请求成功的回调
 @param failure       请求失败的回调
 @return 返回的对象可取消请求,调用cancle方法
 */
+ (__kindof NSURLSessionTask *)requestPOSTWithServerPath:(NSString *)serverPath
                                            Headers:(NSDictionary *)headers
                                       relativePath:(NSString*)relativePath
                                         parameters:(NSDictionary *)parameters
                                      responseCacheBlock:(HttpRequestCache)responseCache
                                            successBlock:(HttpRequestSuccess)success
                                            failureBlock:(HttpRequestFailed)failure;
/**
 功能描述:GET请求,自动缓存
 
 @param serverPath 服务器地址
 @param headers 请求头
 @param relativePath 请求相对路径地址
 @param parameters 请求参数
 @param responseCache 缓存数据的回调
 @param success       请求成功的回调
 @param failure       请求失败的回调
 @return 返回的对象可取消请求,调用cancle方法
 */
+ (__kindof NSURLSessionTask *)requestGETWithServerPath:(NSString *)serverPath
                                                 Headers:(NSDictionary *)headers
                                            relativePath:(NSString*)relativePath
                                              parameters:(NSDictionary *)parameters
                                      responseCacheBlock:(HttpRequestCache)responseCache
                                            successBlock:(HttpRequestSuccess)success
                                            failureBlock:(HttpRequestFailed)failure;

/**
 *  下载文件
 *
 *  @param downloadPath  下载请求地址
 *  @param fileDir  文件存储目录(默认存储目录为Download)
 *  @param progress 文件下载的进度信息
 *  @param success  下载成功的回调(回调参数filePath:文件的路径)
 *  @param failure  下载失败的回调
 *
 *  @return 返回NSURLSessionDownloadTask实例，可用于暂停继续，暂停调用suspend方法，开始下载调用resume方法
 */
+ (__kindof NSURLSessionTask *)downloadWithdownloadPath:(NSString *)downloadPath
                                       fileDir:(NSString *)fileDir
                                      progressBlock:(HttpProgress)progress
                                       successBlock:(void(^)(NSString *filePath))success
                                       failureBlock:(HttpRequestFailed)failure;

/**
 *  上传图片文件
 *
 *  @param serverPath 服务器地址
 *  @param headers 请求头
 *  @param relativePath 请求相对路径地址
 *  @param parameters 请求参数
 *  @param photos     图片数组
 *  @param photoNames       文件对应服务器上的字段
 *  @param progress   上传进度信息
 *  @param success    请求成功的回调
 *  @param failure    请求失败的回调
 *
 *  @return 返回的对象可取消请求,调用cancle方法
 */
+ (__kindof NSURLSessionTask *)uploadWithServerPath:(NSString *)serverPath
                                            Headers:(NSDictionary *)headers
                                       relativePath:(NSString*)relativePath
                                         parameters:(NSDictionary *)parameters
                                             photos:(NSArray <UIImage *>*)photos
                                         photoNames:(NSArray*)photoNames
                                           progress:(HttpProgress)progress
                                            success:(HttpRequestSuccess)success
                                            failure:(HttpRequestFailed)failure;



@end
